#ifndef __TLV_H__
#define __TLV_H__

#include "Packet.hpp"
#include <vector>
#include <string>
using namespace std;
namespace wd
{
//枚举类型相比宏的优势，是可以做类型检查
enum TaskType
{
// 登录相关类型（1-6）
    TASK_TYPE_LOGIN_SECTION1 = 1,
    TASK_TYPE_LOGIN_SECTION1_RESP_OK = 2,
    TASK_TYPE_LOGIN_SECTION1_RESP_ERROR = 3,
    TASK_TYPE_LOGIN_SECTION2 = 4,
    TASK_TYPE_LOGIN_SECTION2_RESP_OK = 5,
    TASK_TYPE_LOGIN_SECTION2_RESP_ERROR = 6,

    // 注册相关类型（7-12，与登录类型完全隔离）
    TASK_TYPE_REGISTER_SECTION1 = 7,
    TASK_TYPE_REGISTER_SECTION1_RESP_OK = 8,
    TASK_TYPE_REGISTER_SECTION1_RESP_ERROR = 9,
    TASK_TYPE_REGISTER_SECTION2 = 10,
    TASK_TYPE_REGISTER_SECTION2_RESP_OK = 11,
    TASK_TYPE_REGISTER_SECTION2_RESP_ERROR = 12,
};
class TLV
{
public:
    //无参构造函数
    TLV();
    //有参构造
    TLV(int type,int length,const char *data);
    ~TLV();
    //序列化将TLV转换为字节流
    int getTotalLength()const;//获取TLV的总长度(type+length+data)
    //序列化将TLV转换为字节流到缓冲区
    void serialize(string &byteStream)const;
    //从缓冲区反序列化
    void deserialize(const char *buffer);
    //测试打印TLV的详细信息
    void print();
    int _type;
    int _length;
    char data[1024];
};
}






#endif

